package com.example.demo.controller;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author sunny
 */
public class ByteLeetCode {

    public static void main(String[] args) {

        System.out.println("test".substring(1));
//        int num = 6;
//        num+=1;
//        System.out.println(num);
//        String [] strings = {"abcd","ancd"};
//        System.out.println(getString(strings));
//        int [] nums = new int[10];
//        System.out.println(nums[0]);
//
//        int length = returnLargeLength("abcabcdbb");
//        System.out.println(length);
        //输入: num1 = "123", num2 = "456"
        //输出: "56088"
        String multiply = multiply("123", "456");
        System.out.println(multiply);
    }

    public static String multiply(String num1, String num2) {
        if(num1.equals("0") || num2.equals("0")){
            return "0";
        }
        int len1 = num1.length();
        int len2 = num2.length();
        int [] num = new int[len1+len2];
        for(int i = len1-1; i>=0; i--){
            int t = num1.charAt(i)-'0';
            for(int j = len2-1; j>=0; j--){
                int sum = t * (num2.charAt(j)-'0');
                num[i+j+1] += sum %10;
                num[i+j] += (num[i+j+1]/10 + sum /10);
                num[i+j+1] %= 10;
            }
        }
        StringBuilder sb = new StringBuilder("");
        int k = 0;
        //去除前导0
        while(num[k] == 0 && k<len1+len2){
            k++;
        }
        for(; k<len1+len2; k++){
            sb.append(num[k]);
        }
        return sb.toString();
    }

    /**
     * 输入: "abcabcbb"
     * 输出: 3
     * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
     */
    public static int getLarge(String str){
        if(str==null || str.length()==0){
            return 0;
        }
        int max = 0;
        int slow = 0;
        int fast = 0;
        int nums[] = new int[500];
        while(slow<str.length() && fast<str.length()){
            if(nums[str.charAt(fast)]==0){
                nums[str.charAt(fast)] =1;
                max = (fast-slow)>max?(fast-slow):max;
                fast++;
            }else {
                nums[str.charAt(slow)] =0;
                slow++;
            }
        }


        return  max;
    }


    public static int returnLargeLength(String str){
        if(str==null || str.length()==0){
            return 0;
        }
        char[] chars = str.toCharArray();
        // index 为 下标 value 为最长子串
        int dps[] = new int [str.length()];
        dps[0] = 1;
        dps[1] = dps[0]+(chars[1]==chars[0]?dps[0]:dps[0]+1);
        int result = 0;
        for(int i=1;i<chars.length;i++){
            boolean flag = false;
            char temp = chars[i];
            for(int j=i-1;j>=i-dps[i-1];j--){
                if(temp==chars[j]){
                    flag =true;
                }
            }
            dps[i] = flag?1:dps[i-1]+1;
            result = result>dps[i]?result:dps[i];
        }

        return result;
    }

    /**
     * 编写一个函数来查找字符串数组中的最长公共前缀。
     *
     * 如果不存在公共前缀，返回空字符串 ""。
     *
     * 示例 1:
     *
     * 输入: ["flower","flow","flight"]
     * 输出: "fl"
     *
     * 思路呢 自己没写出来的原因subString 忘记subString
     */
     public static String getString(String [] strs){
         if(strs==null || strs.length==0){
             return "";
         }
         String temp = strs[0];
         for(int i=1;i<strs.length;i++){

             int j=0;
             for( ;j<temp.length()&&j<strs[i].length();j++){
                 if(temp.charAt(j)!=strs[i].charAt(j)){
                     break;
                 }
             }
             temp = temp.substring(0,j);
         }
         return temp;
     }


    /**
     * 给定两个字符串 s1 和 s2，写一个函数来判断 s2 是否包含 s1 的排列。
     *
     * 换句话说，第一个字符串的排列之一是第二个字符串的子串。
     *
     * 示例1:
     *
     * 输入: s1 = "ab" s2 = "eidbaooo"
     * 输出: True
     * 解释: s2 包含 s1 的排列之一 ("ba").
     *
     *
     * 示例2:
     *
     * 输入: s1= "ab" s2 = "eidboaoo"
     * 输出: False
     */

}
